package com.zjh.mf.mfcorelib.util;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Process;

import java.lang.Thread.UncaughtExceptionHandler;

public class DefaultExceptionHandler implements UncaughtExceptionHandler {

	private Context context = null;
	private Class mainClass = null;
	public DefaultExceptionHandler(Context context, Class mainClass) {
		this.context = context;
		this.mainClass = mainClass;
	}

	@Override
	public void uncaughtException(Thread thread, Throwable ex) {
		sendCrashReport(ex);
		// 等待半秒
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
			// TODO
		}
		// 处理异常
		handleException();
	}

	/**
	 * 收集异常信息 并且发送到服务器
	 * @param ex
	 */
	private void sendCrashReport(Throwable ex) {
		ex.printStackTrace();
		StringBuffer exceptionStr = new StringBuffer();
		exceptionStr.append(ex.getMessage());
		StackTraceElement[] elements = ex.getStackTrace();
		for (int i = 0; i < elements.length; i++) {
			exceptionStr.append("。"+elements[i].toString());
		}
		// TODO
		// 发送收集到的Crash信息到服务器
	}

	private void handleException() {
		// TODO
		// 这里可以对异常进行处理。
		// 比如提示用户程序崩溃了。
		// 比如记录重要的信息，尝试恢复现场。
		// 或者干脆记录重要的信息后，直接杀死程序。
		
		context.startActivity(new Intent(context, mainClass));
		if (context instanceof Activity) {
			((Activity)context).finish();
		}
		
		
		Process.killProcess(Process.myPid());
		System.exit(10);
		
	}

}
